function J = jacobian(x, q, a, b, c, k)
% 计算 MPTM 模型在点 (x,q) 处的雅可比矩阵
%
% 返回 2x2 的雅可比矩阵 J，其中
%   第一行对应 x_{n+1} 关于 x 和 q 的偏导，
%   第二行对应 q_{n+1} 关于 x 和 q 的偏导。
%
% 给定 MPTM 模型：
%   x_{n+1} = a*(x + b*sin(3*x) + c)^2 + k*cos(q)*x
%   q_{n+1} = q - x
%
% 可得：
%   J(1,1) = d/dx [a*(x + b*sin(3*x) + c)^2] + k*cos(q)
%          = 2*a*(x + b*sin(3*x) + c)*(1 + 3*b*cos(3*x)) + k*cos(q)
%   J(1,2) = d/dq [k*cos(q)*x] = - k*sin(q)*x
%   J(2,1) = d/dx (q - x) = -1
%   J(2,2) = d/dq (q - x) = 1
%
% 输入：
%   x, q  - 当前状态
%   a, b, c, k - 模型参数
%
% 输出：
%   J - 2x2 雅可比矩阵

    J11 = 2*a*( x + b*sin(3*x) + c )*( 1 + 3*b*cos(3*x) ) + k*cos(q);
    J12 = - k*sin(q)*x;
    J21 = -1;
    J22 = 1;
    
    J = [J11, J12; J21, J22];
end
